package model;

import java.util.HashMap;

import exceptions.TabelBestaatException;
import exceptions.TabelBestaatNietException;

public class Databank {
	private HashMap<String, Tabel> tabellen;
	private String databankNaam;

	public Databank(String databankNaam) {
		this.databankNaam = databankNaam;
		this.tabellen = new HashMap<String, Tabel>();
	}

	public void addTabel(Tabel tabel) throws TabelBestaatException {
		assert(tabel != null);
		if(!tabellen.containsKey(tabel.getNaam())) {
			tabellen.put(tabel.getNaam(), tabel);
		} else {
			throw new TabelBestaatException("Tabel " + tabel.getNaam() + " bestaat al in databank " + databankNaam);
		}
	}

	public String getDatabankNaam() {
		return databankNaam;
	}

	public String[] getTabellenHashMapKeys() {
		return tabellen.keySet().toArray(new String[0]);
	}
	
	public int getTabellenSize() {
		return tabellen.size();
	}
	
	public void verwijderTabel(String tabelNaam) throws TabelBestaatNietException {
		if(tabellen.containsKey(tabelNaam)) {
			tabellen.remove(tabelNaam);
		} else {
			throw new TabelBestaatNietException("Tabel " + tabelNaam + " bestaat niet in databank " + databankNaam);
		}
	}
	
	public Tabel getTabel(String naam) throws TabelBestaatNietException {
		if (naam != null && !naam.equals("") && tabellen.containsKey(naam)) {
			return tabellen.get(naam);
		} else {
			throw new TabelBestaatNietException("Tabel " + naam + " bestaat niet in databank " + databankNaam);
		}
	}
	
	public String printTabellen() {
		String output = "Databank: " + databankNaam + "\n" + "--------------------------------------\n" ;
		for(Tabel t : tabellen.values()) {
			output += t.printTabelInfo() + "\n";
		}
		return output;
		
	}
}
